package com.yy.super_;

/**
 * chapter08  com.yy.super_
 * 2023-04-05 18:36
 *
 * @author yy yuyue
 * description : 不可描述
 * @date 2023/4/5 18:36
 */
public class B extends A{

    //访问父类的属性, 但是不能访问父类的private属性 [案例]super.属性名
    public void hi(){
        System.out.println(super.n1 + " " + super.n2 + " " + super.n3 + " ");
    }

    public void sum(){
        System.out.println("B类的sum()");
        //希望调用父类的cal方法
        //这时, 因为子类B没有cal方法, 因此我们可以使用下面三种方式

        //我cal方法的时候, 顺序是
        //(1) 先找本类, 如果有, 则调用
        //(2) 如果没有, 则找父类(如果有,并且可以调用, 则调用)
        //(3) 如果父类没有, 则继续找父类的父类, 整个规则, 就算一样的, 直到 Object类
        //提示: 如果查找方法的过程中, 找到了, 但是不能访问, 则报错, cannot access
        //     如果查找方法的过程中, 没有找到, 则提示方法不存在
        //cal();
        this.cal();//等价于 cal  //cal();

        //找cal方法(super.cal()) 的顺序是直接查找父类, 其他的规则是一样的
       // super.cal();

        //演示访问顺序的规则
        //n1 和 this.n1 查找的规则是
        //(1) 先找本类, 如果有, 则调用
        //(2) 如果没有, 则找父类(如果有,并且可以调用, 则调用)
        //(3) 如果父类没有, 则继续找父类的父类, 整个规则, 就算一样的, 直到 Object类
        //提示: 如果查找方法的过程中, 找到了, 但是不能访问, 则报错, cannot access
        //     如果查找方法的过程中, 没有找到, 则提示方法不存在
        System.out.println(n1);//888
        System.out.println(this.n1);//888



        //找n1 (super.n1) 的顺序是直接查找父类属性, 其他的规则一样
        System.out.println(super.n1);//888
    }


    //访问父类的方法, 不能访问父类的private方法 super.方法名(参数列表)

    public void ok(){
        test100();
        test200();
        test300();
        //test400();  //不能访问父类的private方法

    }

    //访问父类的构造器(这点前面使用过): super(参数列表); 只能放在构造器的第一句, 并且只能出现一句!
    public B(){
//
//        super();
//        super("jack",100);
        super("jack");
    }
}
